/**
 * 公用常量定义
 * 包含设施状态、楼层、类型等前后端共用的枚举和常量
 */

// ==================== 设施相关常量 ====================

/**
 * 设施状态枚举
 */
export enum FacilityStatus {
  OPEN = 'OPEN',           // 开放
  CLOSED = 'CLOSED',       // 关闭
  MAINTENANCE = 'MAINTENANCE' // 维护中
}

/**
 * 设施状态选项
 */
export const FACILITY_STATUS_OPTIONS = [
  { label: '开放', value: FacilityStatus.OPEN },
  { label: '关闭', value: FacilityStatus.CLOSED },
  { label: '维护中', value: FacilityStatus.MAINTENANCE }
]

/**
 * 设施类型枚举
 */
export enum FacilityType {
  RESTROOM = 'RESTROOM',   // 洗手间
  FOOD = 'FOOD',           // 餐饮
  DRINK = 'DRINK',         // 饮品
  FIRST_AID = 'FIRST_AID', // 急救
  SECURITY = 'SECURITY',   // 安保
  OTHER = 'OTHER'          // 其他
}

/**
 * 设施类型选项
 */
export const FACILITY_TYPE_OPTIONS = [
  { label: '洗手间', value: FacilityType.RESTROOM },
  { label: '餐饮', value: FacilityType.FOOD },
  { label: '饮品', value: FacilityType.DRINK },
  { label: '急救', value: FacilityType.FIRST_AID },
  { label: '安保', value: FacilityType.SECURITY },
  { label: '其他', value: FacilityType.OTHER }
]

/**
 * 楼层选项
 */
export const FLOOR_OPTIONS = [
  { label: '1F', value: '1F' },
  { label: '2F', value: '2F' },
  { label: '户外', value: 'OUTDOOR' }
]

// ==================== 艺人相关常量 ====================

/**
 * 艺人状态枚举
 */
export enum ArtistStatus {
  ACTIVE = 'ACTIVE',       // 活跃
  INACTIVE = 'INACTIVE'    // 非活跃
}

/**
 * 艺人状态选项
 */
export const ARTIST_STATUS_OPTIONS = [
  { label: '活跃', value: ArtistStatus.ACTIVE },
  { label: '非活跃', value: ArtistStatus.INACTIVE }
]

// ==================== 演出相关常量 ====================

/**
 * 演出状态枚举
 */
export enum PerformanceStatus {
  SCHEDULED = 'SCHEDULED',   // 已安排
  ONGOING = 'ONGOING',       // 进行中
  COMPLETED = 'COMPLETED',   // 已完成
  CANCELLED = 'CANCELLED'    // 已取消
}

/**
 * 演出状态选项
 */
export const PERFORMANCE_STATUS_OPTIONS = [
  { label: '已安排', value: PerformanceStatus.SCHEDULED },
  { label: '进行中', value: PerformanceStatus.ONGOING },
  { label: '已完成', value: PerformanceStatus.COMPLETED },
  { label: '已取消', value: PerformanceStatus.CANCELLED }
]

// ==================== 用户相关常量 ====================

/**
 * 用户状态枚举
 */
export enum UserStatus {
  ACTIVE = 'ACTIVE',       // 活跃
  INACTIVE = 'INACTIVE',   // 非活跃
  BANNED = 'BANNED'        // 已封禁
}

/**
 * 用户状态选项
 */
export const USER_STATUS_OPTIONS = [
  { label: '活跃', value: UserStatus.ACTIVE },
  { label: '非活跃', value: UserStatus.INACTIVE },
  { label: '已封禁', value: UserStatus.BANNED }
]

/**
 * 角色状态枚举
 */
export enum RoleStatus {
  ACTIVE = 'ACTIVE',       // 活跃
  INACTIVE = 'INACTIVE'    // 非活跃
}

/**
 * 角色状态选项
 */
export const ROLE_STATUS_OPTIONS = [
  { label: '活跃', value: RoleStatus.ACTIVE },
  { label: '非活跃', value: RoleStatus.INACTIVE }
]

// ==================== 徽章相关常量 ====================

/**
 * 徽章类型枚举
 */
export enum BadgeType {
  ACHIEVEMENT = 'ACHIEVEMENT', // 成就
  COLLECTION = 'COLLECTION',   // 收集
  SPECIAL = 'SPECIAL'          // 特殊
}

/**
 * 徽章类型选项
 */
export const BADGE_TYPE_OPTIONS = [
  { label: '成就', value: BadgeType.ACHIEVEMENT },
  { label: '收集', value: BadgeType.COLLECTION },
  { label: '特殊', value: BadgeType.SPECIAL }
]

/**
 * 徽章条件类型枚举
 */
export enum BadgeConditionType {
  VOTE_COUNT = 'VOTE_COUNT',           // 投票次数
  PERFORMANCE_ATTENDANCE = 'PERFORMANCE_ATTENDANCE', // 演出参与
  DAYS_ACTIVE = 'DAYS_ACTIVE',         // 活跃天数
  ARTIST_FOLLOW = 'ARTIST_FOLLOW'      // 艺人关注
}

/**
 * 徽章条件类型选项
 */
export const BADGE_CONDITION_TYPE_OPTIONS = [
  { label: '投票次数', value: BadgeConditionType.VOTE_COUNT },
  { label: '演出参与', value: BadgeConditionType.PERFORMANCE_ATTENDANCE },
  { label: '活跃天数', value: BadgeConditionType.DAYS_ACTIVE },
  { label: '艺人关注', value: BadgeConditionType.ARTIST_FOLLOW }
]

// ==================== 通知相关常量 ====================

/**
 * 通知类型枚举
 */
export enum NotificationType {
  PERFORMANCE = 'PERFORMANCE', // 演出
  VOTE = 'VOTE',               // 投票
  SYSTEM = 'SYSTEM',           // 系统
  PROMOTION = 'PROMOTION'      // 推广
}

/**
 * 通知类型选项
 */
export const NOTIFICATION_TYPE_OPTIONS = [
  { label: '演出', value: NotificationType.PERFORMANCE },
  { label: '投票', value: NotificationType.VOTE },
  { label: '系统', value: NotificationType.SYSTEM },
  { label: '推广', value: NotificationType.PROMOTION }
]

// ==================== 助手相关常量 ====================

/**
 * 助手消息类型枚举
 */
export enum AssistantMessageType {
  USER = 'USER',           // 用户消息
  ASSISTANT = 'ASSISTANT'  // 助手消息
}

/**
 * 助手消息格式枚举
 */
export enum AssistantMessageFormat {
  TEXT = 'TEXT',           // 文本
  VOICE = 'VOICE',         // 语音
  IMAGE = 'IMAGE'          // 图片
}

// ==================== 系统配置相关常量 ====================

/**
 * 配置类型枚举
 */
export enum ConfigType {
  STRING = 'STRING',       // 字符串
  NUMBER = 'NUMBER',       // 数字
  BOOLEAN = 'BOOLEAN',     // 布尔值
  JSON = 'JSON'            // JSON
}

/**
 * 配置类型选项
 */
export const CONFIG_TYPE_OPTIONS = [
  { label: '字符串', value: ConfigType.STRING },
  { label: '数字', value: ConfigType.NUMBER },
  { label: '布尔值', value: ConfigType.BOOLEAN },
  { label: 'JSON', value: ConfigType.JSON }
]

// ==================== 工具函数 ====================
type TagType = 'success' | 'danger' | 'warning' | 'info' | 'primary';

/**
 * 获取设施状态标签类型
 * @param status 设施状态
 * @returns 标签类型
 */
export function getFacilityStatusTagType(status: FacilityStatus): TagType {
  const statusMap: Record<FacilityStatus, TagType> = {
    [FacilityStatus.OPEN]: 'success',
    [FacilityStatus.CLOSED]: 'danger',
    [FacilityStatus.MAINTENANCE]: 'warning'
  }
  return statusMap[status] || 'info' as TagType
}

/**
 * 获取设施状态文本
 * @param status 设施状态
 * @returns 状态文本
 */
export function getFacilityStatusText(status: FacilityStatus): string {
  const statusMap: Record<FacilityStatus, string> = {
    [FacilityStatus.OPEN]: '开放',
    [FacilityStatus.CLOSED]: '关闭',
    [FacilityStatus.MAINTENANCE]: '维护中'
  }
  return statusMap[status] || status
}

/**
 * 获取设施类型标签类型
 * @param type 设施类型
 * @returns 标签类型
 */
export function getFacilityTypeTagType(type: FacilityType): TagType {
  const typeMap: Record<FacilityType, TagType> = {
    [FacilityType.RESTROOM]: 'info',
    [FacilityType.FOOD]: 'success',
    [FacilityType.DRINK]: 'warning',
    [FacilityType.FIRST_AID]: 'danger',
    [FacilityType.SECURITY]: 'primary',
    [FacilityType.OTHER]: 'info'
  }
  return typeMap[type] || 'info' as TagType
}

/**
 * 获取设施类型文本
 * @param type 设施类型
 * @returns 类型文本
 */
export function getFacilityTypeText(type: FacilityType): string {
  const typeMap: Record<FacilityType, string> = {
    [FacilityType.RESTROOM]: '洗手间',
    [FacilityType.FOOD]: '餐饮',
    [FacilityType.DRINK]: '饮品',
    [FacilityType.FIRST_AID]: '急救',
    [FacilityType.SECURITY]: '安保',
    [FacilityType.OTHER]: '其他'
  }
  return typeMap[type] || type
}

/**
 * 获取艺人状态标签类型
 * @param status 艺人状态
 * @returns 标签类型
 */
export function getArtistStatusTagType(status: ArtistStatus): TagType {
  const statusMap: Record<ArtistStatus, TagType> = {
    [ArtistStatus.ACTIVE]: 'success',
    [ArtistStatus.INACTIVE]: 'info'
  }
  return statusMap[status] || 'info' as TagType
}

/**
 * 获取艺人状态文本
 * @param status 艺人状态
 * @returns 状态文本
 */
export function getArtistStatusText(status: ArtistStatus): string {
  const statusMap: Record<ArtistStatus, string> = {
    [ArtistStatus.ACTIVE]: '活跃',
    [ArtistStatus.INACTIVE]: '非活跃'
  }
  return statusMap[status] || status
}

/**
 * 获取演出状态标签类型
 * @param status 演出状态
 * @returns 标签类型
 */
export function getPerformanceStatusTagType(status: PerformanceStatus): TagType {
  const statusMap: Record<PerformanceStatus, TagType> = {
    [PerformanceStatus.SCHEDULED]: 'info',
    [PerformanceStatus.ONGOING]: 'success',
    [PerformanceStatus.COMPLETED]: 'warning',
    [PerformanceStatus.CANCELLED]: 'danger'
  }
  return statusMap[status] || 'info' as TagType
}

/**
 * 获取演出状态文本
 * @param status 演出状态
 * @returns 状态文本
 */
export function getPerformanceStatusText(status: PerformanceStatus): string {
  const statusMap: Record<PerformanceStatus, string> = {
    [PerformanceStatus.SCHEDULED]: '已安排',
    [PerformanceStatus.ONGOING]: '进行中',
    [PerformanceStatus.COMPLETED]: '已完成',
    [PerformanceStatus.CANCELLED]: '已取消'
  }
  return statusMap[status] || status
}

/**
 * 获取用户状态标签类型
 * @param status 用户状态
 * @returns 标签类型
 */
export function getUserStatusTagType(status: UserStatus): TagType {
  const statusMap: Record<UserStatus, TagType> = {
    [UserStatus.ACTIVE]: 'success',
    [UserStatus.INACTIVE]: 'info',
    [UserStatus.BANNED]: 'danger'
  }
  return statusMap[status] || 'info' as TagType
}

/**
 * 获取用户状态文本
 * @param status 用户状态
 * @returns 状态文本
 */
export function getUserStatusText(status: UserStatus): string {
  const statusMap: Record<UserStatus, string> = {
    [UserStatus.ACTIVE]: '活跃',
    [UserStatus.INACTIVE]: '非活跃',
    [UserStatus.BANNED]: '已封禁'
  }
  return statusMap[status] || status
}

/**
 * 获取徽章类型标签类型
 * @param type 徽章类型
 * @returns 标签类型
 */
export function getBadgeTypeTagType(type: BadgeType): TagType {
  const typeMap: Record<BadgeType, TagType> = {
    [BadgeType.ACHIEVEMENT]: 'success',
    [BadgeType.COLLECTION]: 'warning',
    [BadgeType.SPECIAL]: 'danger'
  }
  return typeMap[type] || 'info' as TagType
}

/**
 * 获取徽章类型文本
 * @param type 徽章类型
 * @returns 类型文本
 */
export function getBadgeTypeText(type: BadgeType): string {
  const typeMap: Record<BadgeType, string> = {
    [BadgeType.ACHIEVEMENT]: '成就',
    [BadgeType.COLLECTION]: '收集',
    [BadgeType.SPECIAL]: '特殊'
  }
  return typeMap[type] || type
}

/**
 * 获取徽章条件类型文本
 * @param conditionType 条件类型
 * @returns 条件类型文本
 */
export function getBadgeConditionTypeText(conditionType: BadgeConditionType): string {
  const conditionTypeMap: Record<BadgeConditionType, string> = {
    [BadgeConditionType.VOTE_COUNT]: '投票次数',
    [BadgeConditionType.PERFORMANCE_ATTENDANCE]: '演出参与',
    [BadgeConditionType.DAYS_ACTIVE]: '活跃天数',
    [BadgeConditionType.ARTIST_FOLLOW]: '艺人关注'
  }
  return conditionTypeMap[conditionType] || conditionType
}

/**
 * 获取通知类型标签类型
 * @param type 通知类型
 * @returns 标签类型
 */
export function getNotificationTypeTagType(type: NotificationType): TagType {
  const typeMap: Record<NotificationType, TagType> = {
    [NotificationType.PERFORMANCE]: 'success',
    [NotificationType.VOTE]: 'warning',
    [NotificationType.SYSTEM]: 'info',
    [NotificationType.PROMOTION]: 'primary'
  }
  return typeMap[type] || 'info' as TagType
}

/**
 * 获取通知类型文本
 * @param type 通知类型
 * @returns 类型文本
 */
export function getNotificationTypeText(type: NotificationType): string {
  const typeMap: Record<NotificationType, string> = {
    [NotificationType.PERFORMANCE]: '演出',
    [NotificationType.VOTE]: '投票',
    [NotificationType.SYSTEM]: '系统',
    [NotificationType.PROMOTION]: '推广'
  }
  return typeMap[type] || type
}

/**
 * 获取配置类型标签类型
 * @param type 配置类型
 * @returns 标签类型
 */
export function getConfigTypeTagType(type: string): TagType {
  const typeMap: Record<string, TagType> = {
    [ConfigType.STRING]: 'info',
    [ConfigType.NUMBER]: 'success',
    [ConfigType.BOOLEAN]: 'warning',
    [ConfigType.JSON]: 'info'
  }
  return typeMap[type] || 'info' as TagType
}

/**
 * 获取配置类型文本
 * @param type 配置类型
 * @returns 类型文本
 */
export function getConfigTypeText(type: string): string {
  const typeMap: Record<string, string> = {
    [ConfigType.STRING]: '字符串',
    [ConfigType.NUMBER]: '数字',
    [ConfigType.BOOLEAN]: '布尔值',
    [ConfigType.JSON]: 'JSON'
  }
  return typeMap[type] || type
} 